package com.albaba.designpattern.memento.text_002;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * @Description: 玩家类
 * @Author zx
 * @Date 2025/2/27 15:53
 * @Version 1.0
 */
public class Player {

    // 金币
    private int money;

    // 玩家获得的水果
    private List<String> fruits = new ArrayList<>();

    // 表示水果种类的数组
    private static String[] fruitsName = {"苹果", "香蕉", "橘子", "葡萄"};

    Random random = new Random();


    public Player(int money) {
        this.money = money;
    }

    // 获取当前所有金币
    public int getMoney() {
        return money;
    }

    // 获取一个水果
    public String getFruit() {
        String prefix = "";
        if (random.nextBoolean()) {
            prefix = "好吃的";
        }
        // 从数组中拿一个水果
        return prefix + fruitsName[random.nextInt(fruitsName.length)];
    }

    // 掷骰子的方法
    public int yacht() {

        // 掷骰子
        int dice = random.nextInt(6) + 1;
        if (dice == 1) {
            money += 100;
            System.out.println("恭喜你，你掷出了1，你获得100金币");
        } else if (dice == 2) {
            money /= 2;
            System.out.println("很遗憾，你掷出了2，你失去一半金币");
        } else if (dice == 6) {
            // 获取水果
            String fruit = getFruit();
            System.out.println("恭喜你，你掷出了6，你获得了" + fruit);
            fruits.add(fruit);
        } else {
            System.out.println("你掷出了" + dice + ",很遗憾，你什么都没获得");
        }
        return dice;
    }

    // 拍摄快照
    public Memento createMemento() {
        Memento memento = new Memento(money);
        for (String fruit : fruits) {
            // 只保存好吃的水果
            if (fruit.startsWith("好吃的")) {
                memento.addFruit(fruit);
            }
        }
        return memento;
    }

    // 撤销的方法
    public void restoreMemento(Memento memento) {
        this.money = memento.getMoney();
        this.fruits = memento.getFruits();
    }

    @Override
    public String toString() {
        return "Player{" +
                "money=" + money +
                ", fruits=" + fruits +
                '}';
    }
}
